/*
 * VentaDiariaCyberCaffeeFrm.java
 *
 * Created on 5 de marzo de 2008, 05:03 PM
 */

package inc.jmc.cyberboard.ui.ventas;

import inc.jmc.cyberboard.common.DefaultLookAndFeel;
import inc.jmc.cyberboard.common.ImageLoader;
import inc.jmc.cyberboard.dao.Dao;
import inc.jmc.cyberboard.dao.ReportesDao;
import inc.jmc.cyberboard.entitybeans.ReporteRentaBean;

import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.util.Vector;

import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;

import org.apache.log4j.Logger;

/**
 *
 * @author  Juan Miguel Olguin Salguero
 */
public class VentaDiariaPCFrm extends javax.swing.JInternalFrame {
    
	/**
	 * 
	 */
	private static final long serialVersionUID = -3512638452990393026L;
	static Logger logger = Logger.getLogger(VentaDiariaPCFrm.class.getName());
    /** Creates new form VentaDiariaCyberCaffeeFrm */
	public boolean descendiente=true;
	Object[] header=new Object[]{
			"PC",
            "Hora inicial",
			"Hora final",
			"Renta",
			"Total de esta pc en el dia",
			"Total global de las pc's"
			 };
	DefaultTableModel dtm;
    public VentaDiariaPCFrm() {
        initComponents();
        settingInternalFrame();
        try {
			loadProductsBD(descendiente);
		} catch (Exception e) {
			
			e.printStackTrace();
		}
    }
    void settingInternalFrame()
    {
    	this.setFrameIcon(ImageLoader.images[ImageLoader.ICON_FRAME_MAIN]);
        this.setIconifiable(false);
        this.setSize(780,450);
        this.setResizable(true);
        this.setMaximizable(false);
        this.setTitle("Reporte de renta de pc en el dia");
        this.setClosable(true);
        this.updateUI();
    }
    /*public void setVisible(boolean act)
    {
    	try {
			loadProductsBD();
		} catch (Exception e) {
			
			e.printStackTrace();
		}
    	this.setVisible(act);
    }*/
    
    
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        statusBarLabel = new javax.swing.JLabel();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        descendienteMenuItem = new javax.swing.JMenuItem();
        ascendienteMenuItem = new javax.swing.JMenuItem();
        editarMenu = new javax.swing.JMenu();
        copiaMenuItem = new javax.swing.JMenuItem();
        actualizarMenu = new javax.swing.JMenu();
        actualizaMenuItem = new javax.swing.JMenuItem();

        setTitle("Reporte de renta de pc en el dia");
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        statusBarLabel.setText("jLabel1");
        getContentPane().add(statusBarLabel, java.awt.BorderLayout.SOUTH);

        jMenu1.setText("Ordenar");
        descendienteMenuItem.setText("Mas reciente primero");
        descendienteMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                descendienteMenuItemActionPerformed(evt);
            }
        });

        jMenu1.add(descendienteMenuItem);

        ascendienteMenuItem.setText("Mas antig\u00fco primero");
        ascendienteMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ascendienteMenuItemActionPerformed(evt);
            }
        });

        jMenu1.add(ascendienteMenuItem);

        jMenuBar1.add(jMenu1);

        editarMenu.setText("Editar");
        copiaMenuItem.setText("Copia ( se puede pegar en Excel)");
        copiaMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                copiaMenuItemActionPerformed(evt);
            }
        });

        editarMenu.add(copiaMenuItem);

        jMenuBar1.add(editarMenu);

        actualizarMenu.setText("Actualizar");
        actualizarMenu.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                actualizarMenuActionPerformed(evt);
            }
        });

        actualizaMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F6, 0));
        actualizaMenuItem.setText("Actualizar");
        actualizaMenuItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                actualizaMenuItemActionPerformed(evt);
            }
        });

        actualizarMenu.add(actualizaMenuItem);

        jMenuBar1.add(actualizarMenu);

        setJMenuBar(jMenuBar1);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void copiaMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copiaMenuItemActionPerformed

        StringSelection stsel= new StringSelection(this.textoCopy.toString());
        Clipboard systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        systemClipboard.setContents(stsel,stsel);

        
    }//GEN-LAST:event_copiaMenuItemActionPerformed

    private void actualizaMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actualizaMenuItemActionPerformed

        try {
			loadProductsBD(descendiente);
		} catch (Exception e) {
			
			e.printStackTrace();
		}
    }//GEN-LAST:event_actualizaMenuItemActionPerformed

    private void descendienteMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_descendienteMenuItemActionPerformed

        descendiente=true;
        try {
			loadProductsBD(descendiente);
		} catch (Exception e) {
			
			e.printStackTrace();
		}
    }//GEN-LAST:event_descendienteMenuItemActionPerformed

    private void actualizarMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_actualizarMenuActionPerformed

    	
        
    }//GEN-LAST:event_actualizarMenuActionPerformed

    private void ascendienteMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ascendienteMenuItemActionPerformed

        descendiente=false;
        try {
			loadProductsBD(descendiente);
		} catch (Exception e) {
			// 
			e.printStackTrace();
		}
        
    }//GEN-LAST:event_ascendienteMenuItemActionPerformed
    
    /**
     * Este metodo es invocado desde el metodo init de de este frame.<BR>
     * Carga todos los datos que se encuentran en la base de datos y los despleiga en el grid.<BR>
     * Tambien actualiza los botones de agregar y modificar.
     * @throws java.lang.Exception Lanza una excepcion de base de datos cuando se hace la consulta correspondiente.
     */
    StringBuffer textoCopy=new StringBuffer("");
    public void loadProductsBD(boolean descendiente)throws Exception
    {
    			ReportesDao recsDao=new ReportesDao();
                java.sql.Connection conn=Dao.getConnection();
                java.util.ArrayList<ReporteRentaBean> arry=recsDao.getAllRentas(conn,descendiente);
                conn.close();
                dtm=new DefaultTableModel(new Object[][]{},
                header);
                textoCopy=new StringBuffer("<table>");
                
                textoCopy.append("<tr>");
                textoCopy.append("<td>");
                textoCopy.append(header[0]);
                textoCopy.append("</td>");
                
                textoCopy.append("<td>");
                textoCopy.append(header[1]);
                textoCopy.append("</td>");
                
                textoCopy.append("<td>");
                textoCopy.append(header[2]);
                textoCopy.append("</td>");
                
                textoCopy.append("<td>");
                textoCopy.append(header[3]);
                textoCopy.append("</td>");
                
                textoCopy.append("<td>");
                textoCopy.append(header[4]);
                textoCopy.append("</td>");
                
                textoCopy.append("<td>");
                textoCopy.append(header[5]);
                textoCopy.append("</td>");
                
                textoCopy.append("</tr>");
                
                
                
                for(int i=0;i<arry.size();++i)
                {
                	textoCopy.append("<tr>");
                	ReporteRentaBean record=arry.get(i);
                    Vector<String> recVector=new Vector<String>();
                    textoCopy.append("<td>");
                    recVector.add(record.getMaquina());
                    textoCopy.append(record.getMaquina());
                    textoCopy.append("</td>");
                    textoCopy.append("<td>");
                    recVector.add(record.getHoraInicial());
                    textoCopy.append(record.getHoraInicial());
                    textoCopy.append("</td>");
                    textoCopy.append("<td>");
                    recVector.add(record.getHoraFinal());
                    textoCopy.append(record.getHoraFinal());
                    textoCopy.append("</td>");
                    textoCopy.append("<td>");
                    recVector.add(record.getTotal());
                    textoCopy.append(record.getTotal());
                    textoCopy.append("</td>");
                    textoCopy.append("<td>");
                    recVector.add(record.getAcumuladoPorPCHoy());
                    textoCopy.append(record.getAcumuladoPorPCHoy());
                    textoCopy.append("</td>");
                    textoCopy.append("<td>");
                    recVector.add(record.getTotalGlobalDia());
                    textoCopy.append(record.getTotalGlobalDia());
                    textoCopy.append("</tr>");
                    dtm.addRow(recVector);
                    
                    
                }
                textoCopy.append("</table>");
                this.setTableModelUpdateUI(dtm);
                statusBarLabel.setText("Hay "+dtm.getRowCount()+" registros");
    }
    
    /**
     * Con este metodo se garantiza que cualquier modificacion en los datos almacenados en el 
     * default table model, de la tabla, sean actualizados correctamente en el componente visual.<BR>
     * Si se agrega un elemento, si se borra, o se modifica sus atributos (o campos), esta tabla se tiene que actualizar.<BR>
     * Basicamente este metodo crea una nueva tabla, pone las cabeceras, y llena nuevamente los datos en el grid, sobre el viewport de la barra de scroll correspondiente
     * @param dtm Es el default table model que se ha acutalizado, y a partir del cual vamos a construir la nueva tabla visual que se debe ver en el grid.
     */
    public void setTableModelUpdateUI(DefaultTableModel dtm )
    {
        jTable1=new JTable(dtm);
        jTable1.setDragEnabled(true);
        jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jTable1.setFont(DefaultLookAndFeel.TableFont);
        jTable1.setBackground(DefaultLookAndFeel.TableBackground);
        jTable1.setRowHeight(DefaultLookAndFeel.TableRowHeight);
        jTable1.getColumnModel().getColumn(0).setPreferredWidth(92);
        jTable1.getColumnModel().getColumn(1).setPreferredWidth(160);
        jTable1.getColumnModel().getColumn(2).setPreferredWidth(165);
        jTable1.getColumnModel().getColumn(3).setPreferredWidth(69);
        jTable1.getColumnModel().getColumn(4).setPreferredWidth(141);
        jTable1.getColumnModel().getColumn(5).setPreferredWidth(140);
        logger.info("el ancho de las columnas ya se creo");
        jScrollPane1.setViewportView(jTable1);
        //quitamos el atributo de edicion a la tabla
        JTextField aux1=new javax.swing.JTextField();
        aux1.setEditable(false);
        javax.swing.DefaultCellEditor aux2=new javax.swing.DefaultCellEditor(aux1);
        for(int i=0;i<this.header.length;++i)
        {
            jTable1.getColumnModel().getColumn(i).setCellEditor(aux2);
        }
        if(jTable1.getTableHeader()!=null)
          jTable1.getTableHeader().setReorderingAllowed(false);
        
        
        
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem actualizaMenuItem;
    private javax.swing.JMenu actualizarMenu;
    private javax.swing.JMenuItem ascendienteMenuItem;
    private javax.swing.JMenuItem copiaMenuItem;
    private javax.swing.JMenuItem descendienteMenuItem;
    private javax.swing.JMenu editarMenu;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JLabel statusBarLabel;
    // End of variables declaration//GEN-END:variables
    
}
